The VI command set is based on the idea of combining motion commands with other commands. The motion command is used as a text region specifier for other commands. We classify motion commands into point commands and line commands.
h, l, 0, $, w, W, b, B, e, E, (, ), /, ?, `, f, F, t, T, %, ;, ,, ^
j, k, +, -, H, M, L, {, }, G, ', [[, ]], []Text Deletion Commands (see Deleting Text), Change commands (see Changing Text), even Shell Commands (see Shell Commands) use these commands to describe a region of text to operate on.
Viper adds two region descriptors, r and R. These describe the Emacs regions (see Basics), but they are not movement commands.
The command description uses angle brackets ‘<>’ to indicate metasyntactic variables, since the normal conventions of using simple text can be confusing with Viper where the commands themselves are characters. Watch out where < shift commands and <count> are mentioned together!!!
‘<move>’ refers to the above movement commands, and ‘<a-z>’ refers to registers or textmarkers from ‘a’ to ‘z’. Note that the ‘<move>’ is described by full move commands, that is to say they will take counts, and otherwise behave like normal move commands. ‘<address>’ refers to Ex line addresses, which include
Note that the pattern is allowed to contain newline character (inserted as C-qC-j). Therefore, one can search for patterns that span several lines.
Note that ‘%’ is used in Ex commands :e and :r <shell-cmd> to mean current file. If you want a ‘%’ in your command, it must be escaped as ‘\%’. Note that :w and the regular :r <file> command doesn't support the meta symbols ‘%’ and ‘#’, because file history is a better mechanism. Similarly, ‘#’ expands to the previous file. The previous file is the first file in :args listing. This defaults to previous window in the VI sense if you have one window only.
Others like ‘<args> -- arguments’, ‘<cmd> -- command’ etc. should be fairly obvious.
Common characters referred to include:
Viper's idea of Vi's words is slightly different from Vi. First, Viper words understand Emacs symbol tables. Therefore, all symbols declared to be alphanumeric in a symbol table can automatically be made part of the Viper word. This is useful when, for instance, editing text containing European, Cyrillic, Japanese, etc., texts.
Second, Viper lets you depart from Vi's idea of a word by
changing the a syntax preference via the customization widget
(the variable viper-syntax-preference) or by
executing viper-set-syntax-preference
interactively.
By default, Viper syntax preference is
reformed-vi, which means that Viper considers only
those symbols to be part of a word that are specified as
word-symbols by the current Emacs syntax table (which may be
different for different major modes) plus the underscore symbol
_, minus the symbols that are not considered words in
Vi (e.g., `,',;, etc.), but may be considered as word-symbols by
various Emacs major modes. Reformed-Vi works very close to Vi,
and it also recognizes words in other alphabets. Therefore, this
is the most appropriate mode for editing text and is likely to
fit all your needs.
You can also set Viper syntax preference to
strict-vi, which would cause Viper to view all
non-English letters as non-word-symbols.
You can also specify emacs as your preference,
which would make Viper use exactly the same notion of a word as
Emacs does. In particular, the underscore may not be part of a
word in some major modes.
Finally, if viper-syntax-preference is set to
extended, Viper words would consist of characters
that are classified as alphanumeric or as parts of
symbols. This is convenient for editing programs.
viper-syntax-preference is a local variable, so
it can have different values for different major modes. For
instance, in programming modes it can have the value
extended. In text modes where words contain special
characters, such as European (non-English) letters, Cyrillic
letters, etc., the value can be reformed-vi or
emacs. If you consider using different syntactic
preferences for different major modes, you should execute, for
example,
(viper-set-syntax-preference nil "extended")
in the appropriate major mode hooks.
The above discussion concerns only the movement commands. In
regular expressions, words remain the same as in Emacs. That is,
the expressions \w, \>,
\<, etc., use Emacs' idea of what is a word, and
they don't look into the value of variable
viper-syntax-preference. This is because Viper
avoids changing syntax tables in order to not thwart the various
major modes that set these tables.
The usual Emacs convention is used to indicate Control Characters, i.e C-h for Control-h. Do not confuse this with a sequence of separate characters C, -, h!!! The ^ is itself, never used to indicate a Control character.
Finally, we note that Viper's Ex-style commands can be made to work on the current Emacs region. This is done by typing a digit argument before :. For instance, typing 1: will prompt you with something like :123,135, assuming that the current region starts at line 123 and ends at line 135. There is no need to type the line numbers, since Viper inserts them automatically in front of the Ex command.